﻿/*
考研初试排名 
Time Limit:1000MS  Memory Limit:32768K


Description:
考研成绩出来了，大家都想知道自己在所考专业的排名是多少。考研共四科，政治，英语，业务一，业务二。
考研的划线不同于高考，不仅有总分线，还有单科线，如果四门中有一门挂掉，就全挂了。
当然总分挂掉也算挂掉了，现在，复试线已经划出来了，DK想知道自己的排名是多少，当然他会把挂掉的人不计算在内。

Input:
首先一个整数n(n<=10000)，表示考研人数。
然后一行五个非负整数，分别是四门单科的线和总分的线。
再后面有n行数，每行四个整数表示一个人的对应各科的成绩。其中第一行是DK的成绩。 
Output:
对每个用例输出DK的排名，如果DK没有过线则输出tragedy!出现同样过线和DK同样成绩的都算比DK好，因为DK只是考试机器，没啥别的好的。 
Sample Input:
1
50 50 80 80 320
68 45 71 109
3
50 50 80 80 320
59 61 131 109
68 45 71 109
75 63 103 113
Sample Output:
tragedy!
1

*/
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct greater_than{
	unsigned _part;
	greater_than(unsigned part):_part(part)
	{

	}
	bool operator()(const unsigned part)
	{
		return part>=_part;
	}
};
int main()
{
	static const int FIVE =5;
	for (unsigned n; cin>>n && n;)
	{
		unsigned points[FIVE];
		{
			for (unsigned i=0; i<FIVE; i++)
			{
				cin>>points[i];
			}
		}
		vector<unsigned> scores; 
		scores.reserve(n);

		unsigned dk=0U;
		bool isdk=true;
		
		while(n--)
		{
			unsigned point;
			unsigned total=0U;
			bool flag=true;
			for (unsigned i=0; i<(FIVE-1); i++)
			{
				cin>>point;
				if(point<points[i])
					flag=false;
				else
					total+=point;
			}
			if(flag && total>=points[FIVE])
				scores.push_back(total);
		
		
			if(isdk)
			{
				isdk=false;
				dk=total;
			}

		}
		
		if(dk<points[FIVE-1])
		{
			cout<<"tragedy!"<<endl;
		}
		else{
//  			unsigned s[]={10,5, 3, 10, 12};
//  			scores.assign(s, s+5);
			vector<unsigned>::iterator it=partition(scores.begin(), scores.end(), greater_than(dk));		
//			copy(scores.begin(), scores.end(), ostream_iterator<unsigned>(cout, " "));
			cout<<(it-scores.begin())<<endl;	
		}
	
	}

	return EXIT_SUCCESS;
}